import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ws
 * Date: 2024-02-03
 * Time: 15:32
 *
 * https://www.nowcoder.com/share/jump/7745334641706946288843
 */
public class BM69 {

    public int solve(String nums) {
        // 判断字符串是否是合法的
        // 排除 0
        if (nums.equals("0")) {
            return 0;
        }
        // 排出 10，20
        if (nums.equals("10") || nums.equals("20")) {
            return 1;
        }
        // 当 0 前面不是 1 或 2 时无法译码
        for (int i = 1; i < nums.length(); i++) {
            if (nums.charAt(i) == '0') {
                if (nums.charAt(i - 1) != '1' && nums.charAt(i - 1) != '2') {
                    return 0;
                }
            }
        }
        int n = nums.length();
        int[] dp = new int[n + 1];
        Arrays.fill(dp, 1);
        for (int i = 2; i <= n; i++) {
            // 11 - 19 和 21 - 26 都是合法的，且有两种组合
            if ((nums.charAt(i - 2) == '1' && nums.charAt(i - 1) != '0')
                    || (nums.charAt(i - 2) == '2' && nums.charAt(i - 1) > '0' && nums.charAt(i - 1) < '7')) {
                dp[i] = dp[i - 1] + dp[i - 2];
            } else {
                // 其他的只有一种组合
                dp[i] = dp[i - 1];
            }
        }
        return dp[n];
    }

}
